package com.atguigu.dynamic.aspect;

import com.atguigu.dynamic.annotation.Type;

/**
 * 动态数据源处理器，提供线程隔离的ThreadLocal，用于存储切换数据源的key，并提供相应方法获取、设置及清除key
 *
 * @author szj
 * @since 2021-03-21 16:24
 */
public class DataSourceHolder {
    /**
     * ThreadLocal存储数据源的Key，保证线程隔离
     */
    private static final ThreadLocal<Type> dataSources = new ThreadLocal<>();

    /**
     * 获取Key
     */
    public static Type getKey() {
        return dataSources.get();
    }

    /**
     * 设置Key
     */
    public static void setKey(Type type) {
        dataSources.set(type);
    }

    /**
     * 清空所有Key，防止内存泄漏
     */
    public static void clear() {
        dataSources.remove();
    }
}
